﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Negocio.Entidades;
using System.Data.SqlClient;
using System.Data;

namespace Negocio.AccesoDatos
{
    public class SorteoDAO: AccesoADatos
    {
        public SorteoDAO() { }

        public static int ultimoSorteo(int año)
        {
            try
            {   
                string cadena = "SELECT MAX(numero)as numero FROM Sorteo WHERE añoSorteo=@año";
                SqlParameter año_p = new SqlParameter("@año", año);
                string i =consultarSQL(cadena, año_p).Rows[0]["numero"].ToString();
                if (i == "")
                {
                    return 0;
                }
                else 
                {
                    return int.Parse(i);
                }
               
            }
            catch (Exception exception)
            {
                throw exception;
            }
        }
        public static int grabarSorteo(Sorteo s)
        {
            
            SqlCommand cmd = new SqlCommand();
            SqlTransaction trans = null;
            SqlConnection con = obtenerConexion();
            try
            {
                trans = con.BeginTransaction();
                cmd.Connection = con;
                cmd.Transaction = trans;
                cmd.CommandText = "INSERT INTO Sorteo (numero, añoSorteo, id_tipoSorteo, fechaSorteo) VALUES(@numero, @añoSorteo, @id_tipoSorteo, @fechaSorteo); SELECT @@identity;";
                cmd.Parameters.Add(new SqlParameter("@numero", s.numero));
                cmd.Parameters.Add(new SqlParameter("@añoSorteo", s.año));
                cmd.Parameters.Add(new SqlParameter("@id_tipoSorteo", s.tipo_sorteo.id_tipo_sorteo));
                cmd.Parameters.Add(new SqlParameter("@fechaSorteo", s.fecha_sorteo));
                trans.Commit();
                return int.Parse(cmd.ExecuteScalar().ToString());
                

            }
            catch (Exception ex)
            {
                if (trans != null)
                    trans.Rollback();
                throw new ApplicationException("Error al ejecutar la transaccion en la Base de Datos " + ex.Message.ToString());
            }
            finally
            {
                cerrarConexion(con);
            }

        }

        public static int ultimoOrden(int registro)
        {
            try
            {
                string cadena = "SELECT MAX(numeroOrden) as numero FROM DetalleSorteo WHERE registroSorteo=@registro";
                SqlParameter registro_p = new SqlParameter("@registro", registro);
                string i = consultarSQL(cadena, registro_p).Rows[0]["numero"].ToString();
                if (i == "")
                {
                    return 0;
                }
                else
                {
                    return int.Parse(i);
                }
            }
            catch (Exception exception)
            {
                throw exception;
            }

        }
        public static void grabarDetalleSorteo(int registro, int orden, int id_premio)
        {            
            SqlCommand cmd = new SqlCommand();
            SqlTransaction trans = null;
            SqlConnection con = obtenerConexion();
            try
            {
                trans = con.BeginTransaction();
                cmd.Connection = con;
                cmd.Transaction = trans;
                cmd.CommandText = "INSERT INTO DetalleSorteo (registroSorteo, numeroOrden, id_premio) VALUES(@registro, @orden,@id_premio);";
                cmd.Parameters.Add(new SqlParameter("@registro", registro));
                cmd.Parameters.Add(new SqlParameter("@orden", orden));
                cmd.Parameters.Add(new SqlParameter("@id_premio", id_premio));
                cmd.ExecuteNonQuery();
                trans.Commit();
                
            }
            catch (Exception ex)
            {
                if (trans != null)
                    trans.Rollback();
                throw new ApplicationException("Error al ejecutar la transaccion en la Base de Datos " + ex.Message.ToString());
            }
            finally
            {
                cerrarConexion(con);
            }
 
        }

    }
}
